home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 21 / CU Amiga Magazine's Super CD-ROM 21 (1998)(EMAP Images)(GB)[!][issue 1998-04].iso / CUCD / Programming / Python-1.4 / Python1.4_Source / Modules / errnomodule.c < prev    next >
C/C++ Source or Header  |  1996-12-15  |  13KB  |  571 lines

  1. /***********************************************************
  2. Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
  3. The Netherlands.
  4.  
  5.                         All Rights Reserved
  6.  
  7. Permission to use, copy, modify, and distribute this software and its
  8. documentation for any purpose and without fee is hereby granted,
  9. provided that the above copyright notice appear in all copies and that
  10. both that copyright notice and this permission notice appear in
  11. supporting documentation, and that the names of Stichting Mathematisch
  12. Centrum or CWI or Corporation for National Research Initiatives or
  13. CNRI not be used in advertising or publicity pertaining to
  14. distribution of the software without specific, written prior
  15. permission.
  16.  
  17. While CWI is the initial source for this software, a modified version
  18. is made available by the Corporation for National Research Initiatives
  19. (CNRI) at the Internet address ftp://ftp.python.org.
  20.  
  21. STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
  22. REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
  23. MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
  24. CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
  25. DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
  26. PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
  27. TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  28. PERFORMANCE OF THIS SOFTWARE.
  29.  
  30. ******************************************************************/
  31.  
  32. /* Errno module */
  33.  
  34. #include "Python.h"
  35.  
  36. /*
  37.  * Pull in the system error definitions
  38.  */ 
  39.  
  40. #include <errno.h>
  41.  
  42. #include "protos/errnomodule_protos.h"
  43.  
  44. static PyMethodDef errno_methods[] = {
  45.   {NULL,    NULL}
  46. };
  47.  
  48. /*
  49.  * Convenience routine to export an integer value.
  50.  * For simplicity, errors (which are unlikely anyway) are ignored.
  51.  */
  52.  
  53. static void
  54. insint(d, name, value)
  55.     PyObject * d;
  56.     char * name;
  57.     int value;
  58. {
  59.     PyObject *v = PyInt_FromLong((long) value);
  60.     if (v == NULL) {
  61.         /* Don't bother reporting this error */
  62.         PyErr_Clear();
  63.     }
  64.     else {
  65.         PyDict_SetItemString(d, name, v);
  66.         Py_DECREF(v);
  67.     }
  68. }
  69.  
  70. void
  71. initerrno()
  72. {
  73.     PyObject *m, *d;
  74.     m = Py_InitModule("errno", errno_methods);
  75.     d = PyModule_GetDict(m);
  76.  
  77.     /*
  78.      * The names and comments are borrowed from linux/include/errno.h,
  79.      * which should be pretty all-inclusive
  80.      */ 
  81.  
  82. #ifdef EPERM
  83.     /* Operation not permitted */
  84.     insint(d, "EPERM", EPERM);
  85. #endif
  86. #ifdef ENOENT
  87.     /* No such file or directory */
  88.     insint(d, "ENOENT", ENOENT);
  89. #endif
  90. #ifdef ESRCH
  91.     /* No such process */
  92.     insint(d, "ESRCH", ESRCH);
  93. #endif
  94. #ifdef EINTR
  95.     /* Interrupted system call */
  96.     insint(d, "EINTR", EINTR);
  97. #endif
  98. #ifdef EIO
  99.     /* I/O error */
  100.     insint(d, "EIO", EIO);
  101. #endif
  102. #ifdef ENXIO
  103.     /* No such device or address */
  104.     insint(d, "ENXIO", ENXIO);
  105. #endif
  106. #ifdef E2BIG
  107.     /* Arg list too long */
  108.     insint(d, "E2BIG", E2BIG);
  109. #endif
  110. #ifdef ENOEXEC
  111.     /* Exec format error */
  112.     insint(d, "ENOEXEC", ENOEXEC);
  113. #endif
  114. #ifdef EBADF
  115.     /* Bad file number */
  116.     insint(d, "EBADF", EBADF);
  117. #endif
  118. #ifdef ECHILD
  119.     /* No child processes */
  120.     insint(d, "ECHILD", ECHILD);
  121. #endif
  122. #ifdef EAGAIN
  123.     /* Try again */
  124.     insint(d, "EAGAIN", EAGAIN);
  125. #endif
  126. #ifdef ENOMEM
  127.     /* Out of memory */
  128.     insint(d, "ENOMEM", ENOMEM);
  129. #endif
  130. #ifdef EACCES
  131.     /* Permission denied */
  132.     insint(d, "EACCES", EACCES);
  133. #endif
  134. #ifdef EFAULT
  135.     /* Bad address */
  136.     insint(d, "EFAULT", EFAULT);
  137. #endif
  138. #ifdef ENOTBLK
  139.     /* Block device required */
  140.     insint(d, "ENOTBLK", ENOTBLK);
  141. #endif
  142. #ifdef EBUSY
  143.     /* Device or resource busy */
  144.     insint(d, "EBUSY", EBUSY);
  145. #endif
  146. #ifdef EEXIST
  147.     /* File exists */
  148.     insint(d, "EEXIST", EEXIST);
  149. #endif
  150. #ifdef EXDEV
  151.     /* Cross-device link */
  152.     insint(d, "EXDEV", EXDEV);
  153. #endif
  154. #ifdef ENODEV
  155.     /* No such device */
  156.     insint(d, "ENODEV", ENODEV);
  157. #endif
  158. #ifdef ENOTDIR
  159.     /* Not a directory */
  160.     insint(d, "ENOTDIR", ENOTDIR);
  161. #endif
  162. #ifdef EISDIR
  163.     /* Is a directory */
  164.     insint(d, "EISDIR", EISDIR);
  165. #endif
  166. #ifdef EINVAL
  167.     /* Invalid argument */
  168.     insint(d, "EINVAL", EINVAL);
  169. #endif
  170. #ifdef ENFILE
  171.     /* File table overflow */
  172.     insint(d, "ENFILE", ENFILE);
  173. #endif
  174. #ifdef EMFILE
  175.     /* Too many open files */
  176.     insint(d, "EMFILE", EMFILE);
  177. #endif
  178. #ifdef ENOTTY
  179.     /* Not a typewriter */
  180.     insint(d, "ENOTTY", ENOTTY);
  181. #endif
  182. #ifdef ETXTBSY
  183.     /* Text file busy */
  184.     insint(d, "ETXTBSY", ETXTBSY);
  185. #endif
  186. #ifdef EFBIG
  187.     /* File too large */
  188.     insint(d, "EFBIG", EFBIG);
  189. #endif
  190. #ifdef ENOSPC
  191.     /* No space left on device */
  192.     insint(d, "ENOSPC", ENOSPC);
  193. #endif
  194. #ifdef ESPIPE
  195.     /* Illegal seek */
  196.     insint(d, "ESPIPE", ESPIPE);
  197. #endif
  198. #ifdef EROFS
  199.     /* Read-only file system */
  200.     insint(d, "EROFS", EROFS);
  201. #endif
  202. #ifdef EMLINK
  203.     /* Too many links */
  204.     insint(d, "EMLINK", EMLINK);
  205. #endif
  206. #ifdef EPIPE
  207.     /* Broken pipe */
  208.     insint(d, "EPIPE", EPIPE);
  209. #endif
  210. #ifdef EDOM
  211.     /* Math argument out of domain of func */
  212.     insint(d, "EDOM", EDOM);
  213. #endif
  214. #ifdef ERANGE
  215.     /* Math result not representable */
  216.     insint(d, "ERANGE", ERANGE);
  217. #endif
  218. #ifdef EDEADLK
  219.     /* Resource deadlock would occur */
  220.     insint(d, "EDEADLK", EDEADLK);
  221. #endif
  222. #ifdef ENAMETOOLONG
  223.     /* File name too long */
  224.     insint(d, "ENAMETOOLONG", ENAMETOOLONG);
  225. #endif
  226. #ifdef ENOLCK
  227.     /* No record locks available */
  228.     insint(d, "ENOLCK", ENOLCK);
  229. #endif
  230. #ifdef ENOSYS
  231.     /* Function not implemented */
  232.     insint(d, "ENOSYS", ENOSYS);
  233. #endif
  234. #ifdef ENOTEMPTY
  235.     /* Directory not empty */
  236.     insint(d, "ENOTEMPTY", ENOTEMPTY);
  237. #endif
  238. #ifdef ELOOP
  239.     /* Too many symbolic links encountered */
  240.     insint(d, "ELOOP", ELOOP);
  241. #endif
  242. #ifdef EWOULDBLOCK
  243.     /* Operation would block */
  244.     insint(d, "EWOULDBLOCK", EWOULDBLOCK);
  245. #endif
  246. #ifdef ENOMSG
  247.     /* No message of desired type */
  248.     insint(d, "ENOMSG", ENOMSG);
  249. #endif
  250. #ifdef EIDRM
  251.     /* Identifier removed */
  252.     insint(d, "EIDRM", EIDRM);
  253. #endif
  254. #ifdef ECHRNG
  255.     /* Channel number out of range */
  256.     insint(d, "ECHRNG", ECHRNG);
  257. #endif
  258. #ifdef EL2NSYNC
  259.     /* Level 2 not synchronized */
  260.     insint(d, "EL2NSYNC", EL2NSYNC);
  261. #endif
  262. #ifdef EL3HLT
  263.     /* Level 3 halted */
  264.     insint(d, "EL3HLT", EL3HLT);
  265. #endif
  266. #ifdef EL3RST
  267.     /* Level 3 reset */
  268.     insint(d, "EL3RST", EL3RST);
  269. #endif
  270. #ifdef ELNRNG
  271.     /* Link number out of range */
  272.     insint(d, "ELNRNG", ELNRNG);
  273. #endif
  274. #ifdef EUNATCH
  275.     /* Protocol driver not attached */
  276.     insint(d, "EUNATCH", EUNATCH);
  277. #endif
  278. #ifdef ENOCSI
  279.     /* No CSI structure available */
  280.     insint(d, "ENOCSI", ENOCSI);
  281. #endif
  282. #ifdef EL2HLT
  283.     /* Level 2 halted */
  284.     insint(d, "EL2HLT", EL2HLT);
  285. #endif
  286. #ifdef EBADE
  287.     /* Invalid exchange */
  288.     insint(d, "EBADE", EBADE);
  289. #endif
  290. #ifdef EBADR
  291.     /* Invalid request descriptor */
  292.     insint(d, "EBADR", EBADR);
  293. #endif
  294. #ifdef EXFULL
  295.     /* Exchange full */
  296.     insint(d, "EXFULL", EXFULL);
  297. #endif
  298. #ifdef ENOANO
  299.     /* No anode */
  300.     insint(d, "ENOANO", ENOANO);
  301. #endif
  302. #ifdef EBADRQC
  303.     /* Invalid request code */
  304.     insint(d, "EBADRQC", EBADRQC);
  305. #endif
  306. #ifdef EBADSLT
  307.     /* Invalid slot */
  308.     insint(d, "EBADSLT", EBADSLT);
  309. #endif
  310. #ifdef EDEADLOCK
  311.     /* File locking deadlock error */
  312.     insint(d, "EDEADLOCK", EDEADLOCK);
  313. #endif
  314. #ifdef EBFONT
  315.     /* Bad font file format */
  316.     insint(d, "EBFONT", EBFONT);
  317. #endif
  318. #ifdef ENOSTR
  319.     /* Device not a stream */
  320.     insint(d, "ENOSTR", ENOSTR);
  321. #endif
  322. #ifdef ENODATA
  323.     /* No data available */
  324.     insint(d, "ENODATA", ENODATA);
  325. #endif
  326. #ifdef ETIME
  327.     /* Timer expired */
  328.     insint(d, "ETIME", ETIME);
  329. #endif
  330. #ifdef ENOSR
  331.     /* Out of streams resources */
  332.     insint(d, "ENOSR", ENOSR);
  333. #endif
  334. #ifdef ENONET
  335.     /* Machine is not on the network */
  336.     insint(d, "ENONET", ENONET);
  337. #endif
  338. #ifdef ENOPKG
  339.     /* Package not installed */
  340.     insint(d, "ENOPKG", ENOPKG);
  341. #endif
  342. #ifdef EREMOTE
  343.     /* Object is remote */
  344.     insint(d, "EREMOTE", EREMOTE);
  345. #endif
  346. #ifdef ENOLINK
  347.     /* Link has been severed */
  348.     insint(d, "ENOLINK", ENOLINK);
  349. #endif
  350. #ifdef EADV
  351.     /* Advertise error */
  352.     insint(d, "EADV", EADV);
  353. #endif
  354. #ifdef ESRMNT
  355.     /* Srmount error */
  356.     insint(d, "ESRMNT", ESRMNT);
  357. #endif
  358. #ifdef ECOMM
  359.     /* Communication error on send */
  360.     insint(d, "ECOMM", ECOMM);
  361. #endif
  362. #ifdef EPROTO
  363.     /* Protocol error */
  364.     insint(d, "EPROTO", EPROTO);
  365. #endif
  366. #ifdef EMULTIHOP
  367.     /* Multihop attempted */
  368.     insint(d, "EMULTIHOP", EMULTIHOP);
  369. #endif
  370. #ifdef EDOTDOT
  371.     /* RFS specific error */
  372.     insint(d, "EDOTDOT", EDOTDOT);
  373. #endif
  374. #ifdef EBADMSG
  375.     /* Not a data message */
  376.     insint(d, "EBADMSG", EBADMSG);
  377. #endif
  378. #ifdef EOVERFLOW
  379.     /* Value too large for defined data type */
  380.     insint(d, "EOVERFLOW", EOVERFLOW);
  381. #endif
  382. #ifdef ENOTUNIQ
  383.     /* Name not unique on network */
  384.     insint(d, "ENOTUNIQ", ENOTUNIQ);
  385. #endif
  386. #ifdef EBADFD
  387.     /* File descriptor in bad state */
  388.     insint(d, "EBADFD", EBADFD);
  389. #endif
  390. #ifdef EREMCHG
  391.     /* Remote address changed */
  392.     insint(d, "EREMCHG", EREMCHG);
  393. #endif
  394. #ifdef ELIBACC
  395.     /* Can not access a needed shared library */
  396.     insint(d, "ELIBACC", ELIBACC);
  397. #endif
  398. #ifdef ELIBBAD
  399.     /* Accessing a corrupted shared library */
  400.     insint(d, "ELIBBAD", ELIBBAD);
  401. #endif
  402. #ifdef ELIBSCN
  403.     /* .lib section in a.out corrupted */
  404.     insint(d, "ELIBSCN", ELIBSCN);
  405. #endif
  406. #ifdef ELIBMAX
  407.     /* Attempting to link in too many shared libraries */
  408.     insint(d, "ELIBMAX", ELIBMAX);
  409. #endif
  410. #ifdef ELIBEXEC
  411.     /* Cannot exec a shared library directly */
  412.     insint(d, "ELIBEXEC", ELIBEXEC);
  413. #endif
  414. #ifdef EILSEQ
  415.     /* Illegal byte sequence */
  416.     insint(d, "EILSEQ", EILSEQ);
  417. #endif
  418. #ifdef ERESTART
  419.     /* Interrupted system call should be restarted */
  420.     insint(d, "ERESTART", ERESTART);
  421. #endif
  422. #ifdef ESTRPIPE
  423.     /* Streams pipe error */
  424.     insint(d, "ESTRPIPE", ESTRPIPE);
  425. #endif
  426. #ifdef EUSERS
  427.     /* Too many users */
  428.     insint(d, "EUSERS", EUSERS);
  429. #endif
  430. #ifdef ENOTSOCK
  431.     /* Socket operation on non-socket */
  432.     insint(d, "ENOTSOCK", ENOTSOCK);
  433. #endif
  434. #ifdef EDESTADDRREQ
  435.     /* Destination address required */
  436.     insint(d, "EDESTADDRREQ", EDESTADDRREQ);
  437. #endif
  438. #ifdef EMSGSIZE
  439.     /* Message too long */
  440.     insint(d, "EMSGSIZE", EMSGSIZE);
  441. #endif
  442. #ifdef EPROTOTYPE
  443.     /* Protocol wrong type for socket */
  444.     insint(d, "EPROTOTYPE", EPROTOTYPE);
  445. #endif
  446. #ifdef ENOPROTOOPT
  447.     /* Protocol not available */
  448.     insint(d, "ENOPROTOOPT", ENOPROTOOPT);
  449. #endif
  450. #ifdef EPROTONOSUPPORT
  451.     /* Protocol not supported */
  452.     insint(d, "EPROTONOSUPPORT", EPROTONOSUPPORT);
  453. #endif
  454. #ifdef ESOCKTNOSUPPORT
  455.     /* Socket type not supported */
  456.     insint(d, "ESOCKTNOSUPPORT", ESOCKTNOSUPPORT);
  457. #endif
  458. #ifdef EOPNOTSUPP
  459.     /* Operation not supported on transport endpoint */
  460.     insint(d, "EOPNOTSUPP", EOPNOTSUPP);
  461. #endif
  462. #ifdef EPFNOSUPPORT
  463.     /* Protocol family not supported */
  464.     insint(d, "EPFNOSUPPORT", EPFNOSUPPORT);
  465. #endif
  466. #ifdef EAFNOSUPPORT
  467.     /* Address family not supported by protocol */
  468.     insint(d, "EAFNOSUPPORT", EAFNOSUPPORT);
  469. #endif
  470. #ifdef EADDRINUSE
  471.     /* Address already in use */
  472.     insint(d, "EADDRINUSE", EADDRINUSE);
  473. #endif
  474. #ifdef EADDRNOTAVAIL
  475.     /* Cannot assign requested address */
  476.     insint(d, "EADDRNOTAVAIL", EADDRNOTAVAIL);
  477. #endif
  478. #ifdef ENETDOWN
  479.     /* Network is down */
  480.     insint(d, "ENETDOWN", ENETDOWN);
  481. #endif
  482. #ifdef ENETUNREACH
  483.     /* Network is unreachable */
  484.     insint(d, "ENETUNREACH", ENETUNREACH);
  485. #endif
  486. #ifdef ENETRESET
  487.     /* Network dropped connection because of reset */
  488.     insint(d, "ENETRESET", ENETRESET);
  489. #endif
  490. #ifdef ECONNABORTED
  491.     /* Software caused connection abort */
  492.     insint(d, "ECONNABORTED", ECONNABORTED);
  493. #endif
  494. #ifdef ECONNRESET
  495.     /* Connection reset by peer */
  496.     insint(d, "ECONNRESET", ECONNRESET);
  497. #endif
  498. #ifdef ENOBUFS
  499.     /* No buffer space available */
  500.     insint(d, "ENOBUFS", ENOBUFS);
  501. #endif
  502. #ifdef EISCONN
  503.     /* Transport endpoint is already connected */
  504.     insint(d, "EISCONN", EISCONN);
  505. #endif
  506. #ifdef ENOTCONN
  507.     /* Transport endpoint is not connected */
  508.     insint(d, "ENOTCONN", ENOTCONN);
  509. #endif
  510. #ifdef ESHUTDOWN
  511.     /* Cannot send after transport endpoint shutdown */
  512.     insint(d, "ESHUTDOWN", ESHUTDOWN);
  513. #endif
  514. #ifdef ETOOMANYREFS
  515.     /* Too many references: cannot splice */
  516.     insint(d, "ETOOMANYREFS", ETOOMANYREFS);
  517. #endif
  518. #ifdef ETIMEDOUT
  519.     /* Connection timed out */
  520.     insint(d, "ETIMEDOUT", ETIMEDOUT);
  521. #endif
  522. #ifdef ECONNREFUSED
  523.     /* Connection refused */
  524.     insint(d, "ECONNREFUSED", ECONNREFUSED);
  525. #endif
  526. #ifdef EHOSTDOWN
  527.     /* Host is down */
  528.     insint(d, "EHOSTDOWN", EHOSTDOWN);
  529. #endif
  530. #ifdef EHOSTUNREACH
  531.     /* No route to host */
  532.     insint(d, "EHOSTUNREACH", EHOSTUNREACH);
  533. #endif
  534. #ifdef EALREADY
  535.     /* Operation already in progress */
  536.     insint(d, "EALREADY", EALREADY);
  537. #endif
  538. #ifdef EINPROGRESS
  539.     /* Operation now in progress */
  540.     insint(d, "EINPROGRESS", EINPROGRESS);
  541. #endif
  542. #ifdef ESTALE
  543.     /* Stale NFS file handle */
  544.     insint(d, "ESTALE", ESTALE);
  545. #endif
  546. #ifdef EUCLEAN
  547.     /* Structure needs cleaning */
  548.     insint(d, "EUCLEAN", EUCLEAN);
  549. #endif
  550. #ifdef ENOTNAM
  551.     /* Not a XENIX named type file */
  552.     insint(d, "ENOTNAM", ENOTNAM);
  553. #endif
  554. #ifdef ENAVAIL
  555.     /* No XENIX semaphores available */
  556.     insint(d, "ENAVAIL", ENAVAIL);
  557. #endif
  558. #ifdef EISNAM
  559.     /* Is a named type file */
  560.     insint(d, "EISNAM", EISNAM);
  561. #endif
  562. #ifdef EREMOTEIO
  563.     /* Remote I/O error */
  564.     insint(d, "EREMOTEIO", EREMOTEIO);
  565. #endif
  566. #ifdef EDQUOT
  567.     /* Quota exceeded */
  568.     insint(d, "EDQUOT", EDQUOT);
  569. #endif
  570. }
  571.